#!/bin/bash
# CMDB 一键部署脚本 - 自动设置和启动所有服务

set -e  # 遇到错误立即退出

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color

# 获取脚本所在目录的绝对路径
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"

# 日志目录（使用绝对路径）
LOG_DIR="$SCRIPT_DIR/logs"
mkdir -p "$LOG_DIR"

# 进程ID文件
BACKEND_PID_FILE="$LOG_DIR/backend.pid"
FRONTEND_PID_FILE="$LOG_DIR/frontend.pid"

echo -e "${CYAN}=========================================="
echo "   CMDB 资产管理系统 - 一键部署"
echo -e "==========================================${NC}"
echo ""

# 检查是否已经运行
if [ -f "$BACKEND_PID_FILE" ] && kill -0 $(cat "$BACKEND_PID_FILE") 2>/dev/null; then
    echo -e "${YELLOW}⚠️  后端服务已在运行中 (PID: $(cat $BACKEND_PID_FILE))${NC}"
    read -p "是否重启后端? (y/n): " restart_backend
    if [ "$restart_backend" = "y" ]; then
        echo -e "${YELLOW}停止现有后端服务...${NC}"
        kill $(cat "$BACKEND_PID_FILE") 2>/dev/null || true
        rm -f "$BACKEND_PID_FILE"
        sleep 2
    else
        SKIP_BACKEND=1
    fi
fi

if [ -f "$FRONTEND_PID_FILE" ] && kill -0 $(cat "$FRONTEND_PID_FILE") 2>/dev/null; then
    echo -e "${YELLOW}⚠️  前端服务已在运行中 (PID: $(cat $FRONTEND_PID_FILE))${NC}"
    read -p "是否重启前端? (y/n): " restart_frontend
    if [ "$restart_frontend" = "y" ]; then
        echo -e "${YELLOW}停止现有前端服务...${NC}"
        kill $(cat "$FRONTEND_PID_FILE") 2>/dev/null || true
        rm -f "$FRONTEND_PID_FILE"
        sleep 2
    else
        SKIP_FRONTEND=1
    fi
fi

# 1. 检查并设置后端
if [ -z "$SKIP_BACKEND" ]; then
    echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
    echo -e "${BLUE}📦 步骤 1/4: 检查后端环境${NC}"
    echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"

    if [ ! -d ".venv" ]; then
        echo -e "${YELLOW}⚙️  创建虚拟环境...${NC}"
        python3 -m venv .venv
    else
        echo -e "${GREEN}✓ 虚拟环境已存在${NC}"
    fi

    # 激活虚拟环境
    . .venv/bin/activate

    # 检查依赖
    if ! pip show Django &> /dev/null; then
        echo -e "${YELLOW}⚙️  安装后端依赖...${NC}"
        pip install --upgrade pip -q
        pip install -r backend/requirements.txt -q
        echo -e "${GREEN}✓ 后端依赖安装完成${NC}"
    else
        echo -e "${GREEN}✓ 后端依赖已安装${NC}"
    fi

    # 检查数据库
    if [ ! -f "backend/db.sqlite3" ]; then
        echo -e "${YELLOW}⚙️  初始化数据库...${NC}"
        python backend/manage.py makemigrations
        python backend/manage.py migrate
        echo -e "${GREEN}✓ 数据库初始化完成${NC}"
    else
        echo -e "${GREEN}✓ 数据库已存在${NC}"
        # 运行待处理的迁移
        python backend/manage.py migrate --run-syncdb 2>/dev/null || true
    fi

    # 2. 启动后端服务
    echo ""
    echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
    echo -e "${BLUE}🚀 步骤 2/4: 启动后端服务${NC}"
    echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"

    cd backend
    nohup daphne -b 0.0.0.0 -p 8000 backend.asgi:application > "$LOG_DIR/backend.log" 2>&1 &
    BACKEND_PID=$!
    echo $BACKEND_PID > "$BACKEND_PID_FILE"
    cd "$SCRIPT_DIR"

    # 等待后端启动
    echo -e "${YELLOW}⏳ 等待后端启动...${NC}"
    for i in {1..10}; do
        if curl -s http://localhost:8000/admin/ > /dev/null 2>&1; then
            echo -e "${GREEN}✓ 后端服务已启动 (PID: $BACKEND_PID)${NC}"
            echo -e "${GREEN}  访问地址: http://0.0.0.0:8000${NC}"
            break
        fi
        sleep 1
        echo -n "."
    done
    echo ""
else
    echo -e "${GREEN}✓ 跳过后端启动${NC}"
fi

# 3. 检查并设置前端
if [ -z "$SKIP_FRONTEND" ]; then
    echo ""
    echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
    echo -e "${BLUE}📦 步骤 3/4: 检查前端环境${NC}"
    echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"

    cd frontend

    if [ ! -d "node_modules" ]; then
        echo -e "${YELLOW}⚙️  安装前端依赖...${NC}"
        npm install
        echo -e "${GREEN}✓ 前端依赖安装完成${NC}"
    else
        echo -e "${GREEN}✓ 前端依赖已安装${NC}"
    fi

    # 4. 启动前端服务
    echo ""
    echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
    echo -e "${BLUE}🚀 步骤 4/4: 启动前端服务${NC}"
    echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"

    nohup npm run dev > "$LOG_DIR/frontend.log" 2>&1 &
    FRONTEND_PID=$!
    echo $FRONTEND_PID > "$FRONTEND_PID_FILE"
    cd "$SCRIPT_DIR"

    # 等待前端启动
    echo -e "${YELLOW}⏳ 等待前端启动...${NC}"
    for i in {1..15}; do
        if curl -s http://localhost:8080 > /dev/null 2>&1; then
            echo -e "${GREEN}✓ 前端服务已启动 (PID: $FRONTEND_PID)${NC}"
            echo -e "${GREEN}  访问地址: http://0.0.0.0:8080${NC}"
            break
        fi
        sleep 1
        echo -n "."
    done
    echo ""
else
    echo -e "${GREEN}✓ 跳过前端启动${NC}"
fi

# 完成
echo ""
echo -e "${CYAN}=========================================="
echo "          🎉 部署完成！"
echo -e "==========================================${NC}"
echo ""
echo -e "${GREEN}✓ 前端访问地址: ${CYAN}http://localhost:8080${NC}"
echo -e "${GREEN}✓ 后端 API 地址: ${CYAN}http://localhost:8000/api/${NC}"
echo -e "${GREEN}✓ Django Admin: ${CYAN}http://localhost:8000/admin/${NC}"
echo ""
echo -e "${YELLOW}📝 管理命令:${NC}"
echo -e "  ${CYAN}./status.sh${NC}  - 查看服务状态"
echo -e "  ${CYAN}./logs.sh${NC}    - 查看服务日志"
echo -e "  ${CYAN}./stop.sh${NC}    - 停止所有服务"
echo ""
echo -e "${YELLOW}📂 日志文件:${NC}"
echo -e "  后端: ${CYAN}$LOG_DIR/backend.log${NC}"
echo -e "  前端: ${CYAN}$LOG_DIR/frontend.log${NC}"
echo ""
